/**
 * @type {String}
 *
 * @properties={typeid:35,uuid:"7E01B4CF-7DE9-475B-92AC-0D0061EF21FE"}
 */
var fBonificacionTexto = null;

/**
 * @type {String}
 *
 * @properties={typeid:35,uuid:"71974788-0151-47C6-A3E2-BA73023EC101"}
 */
var fProducto = null;

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"E7E423AA-E3B7-46C9-B95E-0E1D93F33822",variableType:4}
 */
var fProveedor = null;

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"352D5341-ABE9-4969-9375-30000F916E48",variableType:4}
 */
var fCambioPrecio = 0;

/**
 * Perform the element default action.
 *
 * @param {JSEvent} event the event that triggered the action
 *
 * @properties={typeid:24,uuid:"ED4D760C-F281-433A-BEF2-63F04481AE18"}
 */
function cancelar(event) {
	databaseManager.revertEditedRecords()
	databaseManager.setAutoSave(true)
	var $win = application.getWindow('CARGA_PRECIO')
	$win.hide()
	$win.destroy()
	forms.precios_proveedor_prod.buscar()
}

/**
 * Perform the element default action.
 *
 * @param {JSEvent} event the event that triggered the action
 *
 * @properties={typeid:24,uuid:"5E0E6DD2-D31E-45B2-97B0-87C503C48428"}
 */
function agregar(event) {
	if (precio == null)
	{
		globals.DIALOGS.showWarningDialog('Aviso','Por favor indique el precio antes de seguir','OK')
		return false
	}
	var $proveedores = provCargados(producto_id)
	var prod_ant = globals.gProductoPrecio
	globals.gProductoPrecio = producto_id
	if ($proveedores > 0)
	{
		globals.gProductoPrecio = prod_ant
		globals.DIALOGS.showWarningDialog('Aviso','El producto ya tiene proveedores cargados. No puede ser unico','OK')
		return false
	}
	globals.gProductoPrecio = prod_ant
	
	if (fCambioPrecio == 1)
	{
		var $rcd = foundset.getRecord(foundset.getSelectedIndex())
		if ($proveedores > 0)
		{
			if (mayorMaximo(producto_id,precio) == 1)
			{
				grabarHistorico($rcd)
				grabarCambioPrecio($rcd)
			}
		}
		else
			grabarHistorico($rcd)
	}
	
	if (!databaseManager.saveData())
		globals.DIALOGS.showWarningDialog('Aviso','Ocurrio un error en la grabacion','OK')
	else
	{
		databaseManager.setAutoSave(true)
		var $win = application.getWindow('CARGA_PRECIO')
		$win.hide()
		$win.destroy()
		forms.precios_proveedor_prod.buscar()
	}
	return true
}

/**
 * @properties={typeid:24,uuid:"5F95EC1D-F376-4291-91A6-94119AA82191"}
 */
function grabarCambioPrecio($rcd)
{
	var $cambio = databaseManager.getFoundSet('infocom','cambio_precios')
	
	$cambio.newRecord()
	$cambio.producto_id 	= $rcd.producto_id
	$cambio.maderas_id 		= $rcd.precios_proveedor_to_productos.maderas_id
	$cambio.margen 			= $rcd.precios_proveedor_to_productos.margen
	$cambio.rubros_id 		= $rcd.precios_proveedor_to_productos.rubros_id
	$cambio.precio_anterior = $rcd.precios_proveedor_to_productos.costo
	$cambio.precio_nuevo	= $rcd.precio_neto
	$cambio.moneda_id 		= $rcd.precios_proveedor_to_productos.moneda_id
	$cambio.fletes_id 		= $rcd.precios_proveedor_to_productos.fletes_id
	$cambio.descripcion		= 'Articulo: ' + $rcd.precios_proveedor_to_productos.cod_producto + ' - ' + $rcd.precios_proveedor_to_productos.descripcion
	//$cambio.tipo			= globals.zconf_cambio_prec_tipo_proveedor
	$cambio.estado			= globals.zconf_cambio_prec_estado_ingresado
}

/**
 * @properties={typeid:24,uuid:"F7044614-2ED1-4E58-B9C8-A4A6AAC03EC3"}
 */
function mayorMaximo(producto,$precio)
{
	var query = 'SELECT MAX(precio) as "maximo" FROM precios_proveedor where producto_id = ?'
	var max = 1
	var args = [producto]
	var ds = databaseManager.getDataSetByQuery('infocom',query,args,max)
	
	if (precio > ds.getValue(1,1))
		return 1
	
	return 0
}

/**
 * @properties={typeid:24,uuid:"665DDB8A-4BB5-4681-AD38-C8044A86FA14"}
 */
function grabarHistorico($rcd)
{
	var $hist = databaseManager.getFoundSet('infocom','precios_proveedor_historico')
	
	$hist.newRecord()
	
	$hist.precio 		= $rcd.precio
	$hist.producto_id	= $rcd.producto_id
	$hist.proveedor_id	= $rcd.proveedor_id
	$hist.userv_id		= $rcd.userv_id
	$hist.fecha			= $rcd.fecha
	$hist.cod_art_prov	= $rcd.cod_art_prov
}

/**
 * @properties={typeid:24,uuid:"0A825A28-D9A3-4A30-90C4-F5F2AB78E233"}
 */
function provCargados(producto)
{
	var query = 'select precio_proveedor_id from precios_proveedor where producto_id = ?'
	var max = -1
	var args = [producto]
	var ds = databaseManager.getDataSetByQuery('infocom',query,args,max)
	
	return ds.getMaxRowIndex()
}

/**
 * @properties={typeid:24,uuid:"BE2A134B-6424-4E16-9A53-34C211D2DBE1"}
 */
function buscarProveedores()
{
	var query = 'select proveedor_id from proveedor where proveedor_id = ?'
	var max = 1
	var args = [fProveedor]
	var ds = databaseManager.getDataSetByQuery('infocom',query,args,max)
	
	if (ds.getMaxRowIndex() == 1)
	{
		proveedor_id = ds.getValue(1,1)
	}
	else
	{
		globals.DIALOGS.showWarningDialog('Aviso','Proveedor no encontrado','OK')
	}
	return true
}

/**
 * @properties={typeid:24,uuid:"5743D315-F443-4B1C-80A9-B1EED82C87AC"}
 */
function buscarProductos()
{
	var query = 'select producto_id from productos where cod_producto = ?'
	var max = 1
	var args = new Array(fProducto)
	var ds = databaseManager.getDataSetByQuery('infocom',query,args,max)
	
	if (ds.getMaxRowIndex() == 1)
	{
		producto_id = ds.getValue(1,1)
	}
	else
	{
		globals.DIALOGS.showWarningDialog('Aviso','Producto no encontrado','OK')
	}
	return true
}

/**
 * Handle changed data.
 *
 *
 * @returns {Boolean}
 *
 * @properties={typeid:24,uuid:"B65E3ECD-A0BB-43EC-BDC2-43BCDFD67342"}
 */
function calculaNeto() {
	if (precio == null)
		precio_neto = null
	else
		if (bonificacion == null)
			precio_neto = precio
		else
			precio_neto = precio * (1 - bonificacion / 100)
	return true
}

/**
 * Handle changed data.
 *
 * @param {Object} oldValue old value
 * @param {Object} newValue new value
 * @param {JSEvent} event the event that triggered the action
 *
 * @returns {Boolean}
 *
 * @properties={typeid:24,uuid:"AD759DA4-79E1-4995-875B-7B8B630A8256"}
 */
function onDataChangeBonificacion(oldValue, newValue, event) {
	
	bonificacion = globals.calculaBonificacion(fBonificacionTexto)
	calculaNeto()
	
	return true
}

/**
 * Callback method for when form is shown.
 *
 * @param {Boolean} firstShow form is shown first time after load
 * @param {JSEvent} event the event that triggered the action
 *
 * @properties={typeid:24,uuid:"26D31773-A269-4FE0-B09C-76D3EF86690F"}
 */
function onShow(firstShow, event) {
	fCambioPrecio = 0
}

/**
 * Handle changed data.
 *
 * @param {Object} oldValue old value
 * @param {Object} newValue new value
 * @param {JSEvent} event the event that triggered the action
 *
 * @returns {Boolean}
 *
 * @properties={typeid:24,uuid:"58B8D962-100C-43FB-82F2-DB659588EEFA"}
 */
function onDataChangePrecio(oldValue, newValue, event) {
	if (oldValue != null && newValue < oldValue)
		globals.DIALOGS.showWarningDialog('Aviso','El precio ingresado es menor al precio anterior','OK')

	fCambioPrecio = 1
	calculaNeto()
	return true
}

/**
 * Perform the element default action.
 *
 * @param {JSEvent} event the event that triggered the action
 *
 * @properties={typeid:24,uuid:"7FDE1803-E2C8-4CBD-B540-D621E75E03AF"}
 */
function borrar(event) {
	controller.deleteRecord()
	databaseManager.setAutoSave(true)
	var $win = application.getWindow('CARGA_PRECIO')
	$win.hide()
	$win.destroy()
	forms.precios_proveedor_prod.buscar()
}
